//package com.dsunsoft.rtu.core.config;
//
//import com.dsunsoft.rtu.common.exception.SignException;
//import com.dsunsoft.rtu.common.util.WebUtils;
//import com.dsunsoft.rtu.common.util.SignUtils;
//import com.dsunsoft.rtu.properties.AppProperties;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.servlet.HandlerInterceptor;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
///**
// * 签名验证 拦截器
// *
// * @author ygm
// */
//@Slf4j
//public class SignatureInterceptor implements HandlerInterceptor {
//
//    @Autowired
//    private AppProperties properties;
//
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        return checkSign(request);
//    }
//
//    /**
//     * 验证签名
//     *
//     * @param request
//     * @return
//     * @throws Exception
//     */
//    private boolean checkSign(HttpServletRequest request) throws Exception {
//        try {
//            String sign = request.getHeader("sign");
//            String timestamp = request.getHeader("timestamp");
//            String requestData = WebUtils.getStreamAsString(request);
//            if (StringUtils.isBlank(sign) || StringUtils.isBlank(requestData) || StringUtils.isBlank(timestamp)) {
//                throw new SignException("签名参数不能为空");
//            }
//            // 计算请求时间戳相差的秒数
//            long diffSecond = (System.currentTimeMillis() - Long.parseLong(timestamp)) / 1000;
//            if (diffSecond > 60) {
//                throw new SignException("请求时间戳超时");
//            }
//            // 签名加密和判断是否一致
//            String data = requestData + timestamp + properties.getSignSecret();
//            String rawSign = SignUtils.encodeBase64(SignUtils.md5(data));
//            if (!sign.equals(rawSign)) {
//                throw new SignException("签名验证失败");
//            }
//            return true;
//        } catch (SignException e) {
//            throw e;
//        } catch (Exception e) {
//            throw new SignException("签名参数错误");
//        }
//    }
//}
